/// ***************************************************************************
/// @warning Copyright (C), 1993-2011,CDSF Information Technologies Co., Ltd.
/// @file DirManager.h
/// @author luoshanjie
/// @version 1.0
/// @date 2011/05/18
/// @brief 重构时, 再用GCC的编译特性来重写popen的数据, 暂时用fread
/// @attention   
/// @note 
/// @<author>    <time>   <version >   <desc>
///**************************************************************************/


#ifndef _DIRMANAGER_H_
#define _DIRMANAGER_H_
#define BUFFER_SIZE 128

#include <string.h>
#include <vector>
#include <iostream>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>
using namespace std;
class CDirManager
{
public:
	//构造函数
	CDirManager(void){}
	//析构函数
	~CDirManager(void){}
public:
	///************************************************************
	/// @brief按指定路径创建目录
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] path目录路径
	/// @param[out] 
	/// @return 0-成功-1-失败
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int mk_dir(const char* path);

	///************************************************************
	/// @brief按指定路径删除目录
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] path目录路径
	/// @param[out] 
	/// @return 0-成功-1-失败
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int rm_dir(const char* path);
	
	///************************************************************
	/// @brief拷贝文件
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] src源地址
	/// @param[in] dest目的地址
	/// @param[out]
	/// @return 0-成功-1-失败
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int copy_file(const char*, const char*);

	///************************************************************
	/// @brief移动文件
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] src源地址
	/// @param[in] dest目的地址
	/// @param[out]
	/// @return 0-成功-1-失败
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int move_file(const char* src, const char* dest);
    

	///************************************************************
	/// @brief判断文件是否被进程打开
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] file文件路径
	/// @param[out]
	/// @return 0-成功-1-失败
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int is_no_proc_open_file(const char* file);

	///************************************************************
	/// @brief 获取当前文件或文件夹所在文件夹路径
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in]
	/// @param[out]id
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int get_dir_path(const char* path, string& dir);

	///************************************************************
	/// @brief 获取路径飞文件名
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in]
	/// @param[out]id
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
    static int get_file_name(const string &file_path,string &file_name);

	///************************************************************
	/// @brief 改文件夹或文件名字
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] 
	/// @param[out] 
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int rename(const string& srcname, const string& destname);

	///************************************************************
	/// @brief  返回文件id最大的文件名
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] 
	/// @param[out] 
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int get_max_id_file(string &dir,string &max_id_file);
	
	///************************************************************
	/// @brief   复制文件夹或文件
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] 
	/// @param[out] 
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int cp_dir(const string src,const string &dest);

	///************************************************************
	/// @brief   复制文件到文件夹
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] 
	/// @param[out] 
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int cp_file_to_dir(const char* in_cl_file_name,
                              const char* in_cl_dest_path);

	///************************************************************
	/// @brief   判断是否是文件夹
	/// @details 
	/// @pre 
	/// @post 
	/// @param[in] 
	/// @param[out] 
	/// @return 
	/// @exception 
	/// @todo 
	/// @attention 
	///************************************************************/
	static int is_dir(const char * path);
};


#endif

